package com.harveyguo.nihonngo.repositories;

import com.harveyguo.nihonngo.model.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 用户Repository
 */
@Repository
public interface UserRepository extends JpaRepository<User, String> {

   Optional<User> findByUsername(String name);

   /**
    * 根据拳击水平查找用户
    */
   List<User> findByBoxingLevel(String boxingLevel);

   /**
    * 根据经验年数查找用户
    */
   List<User> findByExperienceYears(Integer experienceYears);

   /**
    * 根据偏好风格查找用户
    */
   List<User> findByPreferredStyle(String preferredStyle);

   /**
    * 根据地理位置查找附近的用户
    */
   @Query("SELECT u FROM User u WHERE " +
         "SQRT(POWER(u.latitude - :latitude, 2) + POWER(u.longitude - :longitude, 2)) <= :radius")
   List<User> findNearbyUsers(@Param("latitude") Double latitude,
         @Param("longitude") Double longitude,
         @Param("radius") Double radius);
}
